from django.test import TestCase

# Create your tests here.


class StudentModel:
    def __init__(self, name="", sex="", score=0.0, age=0, sid=0):
            self.name = name
            self.sex = sex
            self.score = score
            self.age = age
            self.sid = sid  # 在系统中,数据的唯一标记

    def __str__(self):
        return self.name


class StudentView:
    """
        学生界面视图
            负责处理界面逻辑(输入/输出)
    """

    def __init__(self):
        # 实例化 StudentController类  self.__controller就拥有了StudentController所有的属性和方法
        self.__controller = StudentController()

    def main(self):
        while True:
            print([stu.__dict__ for stu in self.__controller.list_students])
            self.__display_menu()
            self.__select_menu()

    def __display_menu(self):
        print("1. 添加学生信息")
        print("2. 显示学生信息")
        print("3. 删除学生信息")
        print("4. 修改学生信息")

    def __select_menu(self):
        item = input("请输入您的选项：")
        if item == "1":
            # 先写方法调用语句,再alt + 回车,自动生成创建方法代码.
            self.__input_student()
        elif item == "2":
            self.__display_students()
        elif item == "3":
            self.__delete_student()
        elif item == "4":
            self.__change_student()

    def __input_student(self):
        stu = StudentModel()
        stu.name = input("请输入学生姓名：")
        stu.sex = input("请输入学生性别：")
        stu.score = int(input("请输入学生成绩："))
        stu.age = int(input("请输入学生年龄："))
        # 调用核心逻辑控制器C中的方法
        self.__controller.add_student(stu)  # # 调用 StudentController.add_student(sid)

    def __display_students(self):
        for stu in self.__controller.list_students:
            print(f"{stu.name}的编号是{stu.sid},年龄是{stu.age},性别是{stu.sex},成绩是{stu.score}")

    def __delete_student(self):
        sid = int(input("请输入需要删除的学生编号："))
        if self.__controller.remove_student(sid):  # 调用 StudentController.remove_student(sid)
            print("删除成功")
        else:
            print("删除失败")

    def __change_student(self):
        stu = StudentModel()
        stu.sid = int(input("请输入需要修改的学生编号："))
        stu.name = input("请输入需要修改的学生姓名：")
        stu.sex = input("请输入需要修改的学生性别：")
        stu.score = int(input("请输入需要修改的学生成绩："))
        stu.age = int(input("请输入需要修改的学生年龄："))
        if self.__controller.update_student(stu):   # 调用 StudentController.update_student(sid)
            print("修改成功")
        else:
            print("修改失败")


class StudentController:
    """
        学生控制器
            对学生信息的核心处理逻辑(添加/删除/修改..)
    """

    def __init__(self):
        self.__list_students = []
        self.__start_id = 1000  # 如果有多个学生控制器,start_id会重复

    @property
    def list_students(self):
        return self.__list_students

    def add_student(self, stu_target):
        """
            添加学生信息
        :param stu_target:目标学生 为StudentModel的实例化对象
        """
        stu_target.sid = self.__start_id
        self.__start_id += 1

        self.__list_students.append(stu_target)  # self.__list_students 存放的是 StudentModel 的实例化对象

    def remove_student(self, sid):
        # 如果 StudentModel实例化类的对象 的 id = input传过来的id 就将它从 self.__list_students 移除
        for stu in self.__list_students:
            if stu.sid == sid:
                self.__list_students.remove(stu)
                return True

    def update_student(self, stu):
        # 将所有StudentModel的实例化对象遍历出来
        for student in self.__list_students:
            # 如果 StudentModel的实例化对象的sid=input输入进来的sid，就将它从self.__list_students移除
            if student.sid == stu.sid:
                self.__list_students.remove(student)
                self.__list_students.append(stu)
                return True


if __name__ == '__main__':
    stu = StudentView()
    stu.main()


